{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First we load the libraries we need and start a graph, as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /tmp/ipykernel_21801/424337248.py:5: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2022-06-10 20:11:34.176889: I tensorflow/core/platform/cpu_feature_guard.cc:145] This TensorFlow binary is optimized with Intel(R) MKL-DNN to use the following CPU instructions in performance critical operations:  SSE4.1 SSE4.2 AVX AVX2 FMA\n",
      "To enable them in non-MKL-DNN operations, rebuild TensorFlow with the appropriate compiler flags.\n",
      "2022-06-10 20:11:34.202062: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 3600050000 Hz\n",
      "2022-06-10 20:11:34.202811: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x558b1c649a60 initialized for platform Host (this does not guarantee that XLA will be used). Devices:\n",
      "2022-06-10 20:11:34.202849: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version\n",
      "OMP: Info #155: KMP_AFFINITY: Initial OS proc set respected: 0-11\n",
      "OMP: Info #216: KMP_AFFINITY: decoding x2APIC ids.\n",
      "OMP: Info #157: KMP_AFFINITY: 12 available OS procs\n",
      "OMP: Info #158: KMP_AFFINITY: Uniform topology\n",
      "OMP: Info #287: KMP_AFFINITY: topology layer \"LL cache\" is equivalent to \"socket\".\n",
      "OMP: Info #287: KMP_AFFINITY: topology layer \"L3 cache\" is equivalent to \"socket\".\n",
      "OMP: Info #287: KMP_AFFINITY: topology layer \"L2 cache\" is equivalent to \"core\".\n",
      "OMP: Info #287: KMP_AFFINITY: topology layer \"L1 cache\" is equivalent to \"core\".\n",
      "OMP: Info #192: KMP_AFFINITY: 1 socket x 6 cores/socket x 2 threads/core (6 total cores)\n",
      "OMP: Info #218: KMP_AFFINITY: OS proc to physical thread map:\n",
      "OMP: Info #172: KMP_AFFINITY: OS proc 0 maps to socket 0 core 0 thread 0 \n",
      "OMP: Info #172: KMP_AFFINITY: OS proc 6 maps to socket 0 core 0 thread 1 \n",
      "OMP: Info #172: KMP_AFFINITY: OS proc 1 maps to socket 0 core 1 thread 0 \n",
      "OMP: Info #172: KMP_AFFINITY: OS proc 7 maps to socket 0 core 1 thread 1 \n",
      "OMP: Info #172: KMP_AFFINITY: OS proc 2 maps to socket 0 core 2 thread 0 \n",
      "OMP: Info #172: KMP_AFFINITY: OS proc 8 maps to socket 0 core 2 thread 1 \n",
      "OMP: Info #172: KMP_AFFINITY: OS proc 3 maps to socket 0 core 3 thread 0 \n",
      "OMP: Info #172: KMP_AFFINITY: OS proc 9 maps to socket 0 core 3 thread 1 \n",
      "OMP: Info #172: KMP_AFFINITY: OS proc 4 maps to socket 0 core 4 thread 0 \n",
      "OMP: Info #172: KMP_AFFINITY: OS proc 10 maps to socket 0 core 4 thread 1 \n",
      "OMP: Info #172: KMP_AFFINITY: OS proc 5 maps to socket 0 core 5 thread 0 \n",
      "OMP: Info #172: KMP_AFFINITY: OS proc 11 maps to socket 0 core 5 thread 1 \n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21801 thread 0 bound to OS proc set 0\n",
      "2022-06-10 20:11:34.209943: I tensorflow/core/common_runtime/process_util.cc:115] Creating new thread pool with default inter op setting: 2. Tune using inter_op_parallelism_threads for best performance.\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from sklearn import datasets\n",
    "sess = tf.Session()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "iris = datasets.load_iris()\n",
    "x_vals = np.array([[x[0], x[3]] for x in iris.data])\n",
    "y_vals1 = np.array([1 if y==0 else -1 for y in iris.target])\n",
    "y_vals2 = np.array([1 if y==1 else -1 for y in iris.target])\n",
    "y_vals3 = np.array([1 if y==2 else -1 for y in iris.target])\n",
    "y_vals = np.array([y_vals1, y_vals2, y_vals3])\n",
    "class1_x = [x[0] for i,x in enumerate(x_vals) if iris.target[i]==0]\n",
    "class1_y = [x[1] for i,x in enumerate(x_vals) if iris.target[i]==0]\n",
    "class2_x = [x[0] for i,x in enumerate(x_vals) if iris.target[i]==1]\n",
    "class2_y = [x[1] for i,x in enumerate(x_vals) if iris.target[i]==1]\n",
    "class3_x = [x[0] for i,x in enumerate(x_vals) if iris.target[i]==2]\n",
    "class3_y = [x[1] for i,x in enumerate(x_vals) if iris.target[i]==2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /tmp/ipykernel_21801/1940473549.py:2: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "batch_size = 50\n",
    "x_data = tf.placeholder(shape=[None, 2], dtype=tf.float32)\n",
    "y_target = tf.placeholder(shape=[3, None], dtype=tf.float32)\n",
    "prediction_grid = tf.placeholder(shape=[None, 2], dtype=tf.float32)\n",
    "b = tf.Variable(tf.random.normal(shape=[3,batch_size]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "gamma = tf.constant(-10.0)\n",
    "dist = tf.reduce_sum(tf.square(x_data), 1)\n",
    "dist = tf.reshape(dist, [-1,1])\n",
    "sq_dists = tf.add(tf.subtract(dist, tf.multiply(2., tf.matmul(x_data, tf.transpose(x_data)))), tf.transpose(dist))\n",
    "rbf_kernel = tf.exp(tf.multiply(gamma, tf.abs(sq_dists)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def reshape_matmul(mat):\n",
    "    v1 = tf.expand_dims(mat, 1)\n",
    "    v2 = tf.reshape(v1, [3, batch_size, 1])\n",
    "    return(tf.matmul(v2, v1)) # tf.batchmatmul"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_output = tf.matmul(b, rbf_kernel)\n",
    "first_term = tf.reduce_sum(b)\n",
    "b_vec_cross = tf.matmul(tf.transpose(b), b)\n",
    "y_target_cross = reshape_matmul(y_target)\n",
    "second_term = tf.reduce_sum(tf.multiply(rbf_kernel, tf.multiply(b_vec_cross, y_target_cross)), [1, 2])\n",
    "loss = tf.reduce_sum(tf.negative(tf.subtract(first_term, second_term)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "rA = tf.reshape(tf.reduce_sum(tf.square(x_data), 1),[-1,1])\n",
    "rB = tf.reshape(tf.reduce_sum(tf.square(prediction_grid), 1),[-1,1])\n",
    "pred_sq_dist = tf.add(tf.subtract(rA, tf.multiply(2., tf.matmul(x_data, tf.transpose(prediction_grid)))), tf.transpose(rB))\n",
    "pred_kernel = tf.exp(tf.multiply(gamma, tf.abs(pred_sq_dist)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "prediction_output = tf.matmul(tf.multiply(y_target,b), pred_kernel)\n",
    "prediction = tf.argmax(prediction_output - tf.expand_dims(tf.reduce_mean(prediction_output,1), 1), 0)\n",
    "accuracy = tf.reduce_mean(tf.cast(tf.equal(prediction, tf.argmax(y_target,0)), tf.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /tmp/ipykernel_21801/2755640300.py:1: The name tf.train.GradientDescentOptimizer is deprecated. Please use tf.compat.v1.train.GradientDescentOptimizer instead.\n",
      "\n",
      "WARNING:tensorflow:From /tmp/ipykernel_21801/2755640300.py:3: The name tf.global_variables_initializer is deprecated. Please use tf.compat.v1.global_variables_initializer instead.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "my_opt = tf.train.GradientDescentOptimizer(0.01)\n",
    "train_step = my_opt.minimize(loss)\n",
    "init = tf.global_variables_initializer()\n",
    "sess.run(init)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21862 thread 1 bound to OS proc set 1\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21861 thread 2 bound to OS proc set 2\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21876 thread 3 bound to OS proc set 3\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21877 thread 4 bound to OS proc set 4\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21879 thread 6 bound to OS proc set 6\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21880 thread 7 bound to OS proc set 7\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21878 thread 5 bound to OS proc set 5\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21881 thread 8 bound to OS proc set 8\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21882 thread 9 bound to OS proc set 9\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21883 thread 10 bound to OS proc set 10\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21884 thread 11 bound to OS proc set 11\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21887 thread 14 bound to OS proc set 2\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21885 thread 12 bound to OS proc set 0\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21886 thread 13 bound to OS proc set 1\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21888 thread 15 bound to OS proc set 3\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21889 thread 16 bound to OS proc set 4\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21890 thread 17 bound to OS proc set 5\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21891 thread 18 bound to OS proc set 6\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21892 thread 19 bound to OS proc set 7\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21894 thread 21 bound to OS proc set 9\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21893 thread 20 bound to OS proc set 8\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21895 thread 22 bound to OS proc set 10\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21896 thread 23 bound to OS proc set 11\n",
      "OMP: Info #254: KMP_AFFINITY: pid 21801 tid 21897 thread 24 bound to OS proc set 0\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Step #25\n",
      "Loss = 1.5513105\n",
      "Step #50\n",
      "Loss = -21.60889\n",
      "Step #75\n",
      "Loss = -27.445341\n",
      "Step #100\n",
      "Loss = -24.741589\n",
      "Step #125\n",
      "Loss = -27.332714\n",
      "Step #150\n",
      "Loss = -25.370949\n",
      "Step #175\n",
      "Loss = -25.298578\n",
      "Step #200\n",
      "Loss = -27.7843\n",
      "Step #225\n",
      "Loss = -28.798386\n",
      "Step #250\n",
      "Loss = -28.134562\n",
      "Step #275\n",
      "Loss = -26.397268\n",
      "Step #300\n",
      "Loss = -26.143816\n",
      "Step #325\n",
      "Loss = -26.464687\n",
      "Step #350\n",
      "Loss = -27.014046\n",
      "Step #375\n",
      "Loss = -24.300747\n",
      "Step #400\n",
      "Loss = -25.866074\n",
      "Step #425\n",
      "Loss = -29.966492\n",
      "Step #450\n",
      "Loss = -27.335323\n",
      "Step #475\n",
      "Loss = -25.74989\n",
      "Step #500\n",
      "Loss = -27.692564\n",
      "Step #525\n",
      "Loss = -25.24536\n",
      "Step #550\n",
      "Loss = -26.63044\n",
      "Step #575\n",
      "Loss = -28.022999\n",
      "Step #600\n",
      "Loss = -23.838818\n",
      "Step #625\n",
      "Loss = -27.130758\n",
      "Step #650\n",
      "Loss = -25.282913\n",
      "Step #675\n",
      "Loss = -32.581875\n",
      "Step #700\n",
      "Loss = -27.263239\n",
      "Step #725\n",
      "Loss = -24.809181\n",
      "Step #750\n",
      "Loss = -26.745882\n",
      "Step #775\n",
      "Loss = -27.364517\n",
      "Step #800\n",
      "Loss = -28.567558\n",
      "Step #825\n",
      "Loss = -27.891344\n",
      "Step #850\n",
      "Loss = -28.658974\n",
      "Step #875\n",
      "Loss = -27.236202\n",
      "Step #900\n",
      "Loss = -26.030561\n",
      "Step #925\n",
      "Loss = -25.385159\n",
      "Step #950\n",
      "Loss = -26.251661\n",
      "Step #975\n",
      "Loss = -21.424604\n",
      "Step #1000\n",
      "Loss = -24.128918\n",
      "Step #1025\n",
      "Loss = -27.931639\n",
      "Step #1050\n",
      "Loss = -27.836285\n",
      "Step #1075\n",
      "Loss = -29.343054\n",
      "Step #1100\n",
      "Loss = -25.206573\n",
      "Step #1125\n",
      "Loss = -28.52973\n",
      "Step #1150\n",
      "Loss = -26.859121\n",
      "Step #1175\n",
      "Loss = -27.37376\n",
      "Step #1200\n",
      "Loss = -27.08103\n",
      "Step #1225\n",
      "Loss = -25.23817\n",
      "Step #1250\n",
      "Loss = -28.488071\n",
      "Step #1275\n",
      "Loss = -27.998219\n",
      "Step #1300\n",
      "Loss = -31.197762\n",
      "Step #1325\n",
      "Loss = -26.695658\n",
      "Step #1350\n",
      "Loss = -29.229927\n",
      "Step #1375\n",
      "Loss = -28.82034\n",
      "Step #1400\n",
      "Loss = -22.229362\n",
      "Step #1425\n",
      "Loss = -28.582\n",
      "Step #1450\n",
      "Loss = -27.580555\n",
      "Step #1475\n",
      "Loss = -26.981956\n",
      "Step #1500\n",
      "Loss = -26.216003\n"
     ]
    }
   ],
   "source": [
    "loss_vec = []\n",
    "batch_accuracy = []\n",
    "for i in range(1500):\n",
    "    rand_index = np.random.choice(len(x_vals), size=batch_size)\n",
    "    rand_x = x_vals[rand_index]\n",
    "    rand_y = y_vals[:,rand_index]\n",
    "    sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "\n",
    "    temp_loss = sess.run(loss, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "    loss_vec.append(temp_loss)\n",
    "    acc_temp = sess.run(accuracy, feed_dict={x_data: rand_x, y_target: rand_y, prediction_grid: rand_x})\n",
    "    batch_accuracy.append(acc_temp)\n",
    "\n",
    "    if (i+1)%25==0:\n",
    "        print('Step #' + str(i+1))\n",
    "        print('Loss = ' + str(temp_loss))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_min, x_max = x_vals[:, 0].min() - 1, x_vals[:, 0].max() + 1\n",
    "y_min, y_max = x_vals[:, 1].min() - 1, x_vals[:, 1].max() + 1\n",
    "xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))\n",
    "grid_points = np.c_[xx.ravel(), yy.ravel()]\n",
    "grid_predictions = sess.run(prediction, feed_dict={x_data: rand_x, y_target: rand_y, prediction_grid: grid_points})\n",
    "grid_predictions = grid_predictions.reshape(xx.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3.5, 8.5)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.contourf(xx, yy, grid_predictions, cmap=plt.cm.Paired, alpha=0.8)\n",
    "plt.plot(class1_x, class1_y, 'ro', label='I. setosa')\n",
    "plt.plot(class2_x, class2_y, 'kx', label='I. versicolor')\n",
    "plt.plot(class3_x, class3_y, 'gv', label='I. virginica')\n",
    "plt.title('Gaussian SVM Results on Iris Data')\n",
    "plt.xlabel('Pedal Length')\n",
    "plt.ylabel('Sepal Width')\n",
    "plt.legend(loc='lower right')\n",
    "plt.ylim([-0.5, 3.0])\n",
    "plt.xlim([3.5, 8.5])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f0f3c1c3fd0>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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x8CBA+nSpQsHDx5k/vz5iAg5OTnUrVuXhg0b8t1335GRkcFFF13E3r17+fnnn9m5cye//PILP//8M40aNWLFihUMGjSIRo0asWXLFnbv3k2LFi1YvXo15557Lps2beJ//ud/qFevHhdddBHDhw8P+/xef/11qlatStu2bVm2bBkXXnghCxYsoHv37qxbt44hQ4bQuXNnhgwZQo0aNWjVqhVvvvkmgwcPZvTo0bz11ltcd911HHfccfTo0YN58+bRokULatasye7du3nggQcYPnw4jRo1YvHixezcuZMFCxbQt29f7rvvPmbPns2qVat48MEHefvtt2nVqhVLlixh9+7d9O7dm+OPP56VK1fyr3/9iz179vDTTz/RoUMHjjnmGBo0aFDwWWVmZvLVV19x5MgRmjZtSvv27dm3bx/NmjXj0KFDvP3221x22WW0ahV49PDkyZOZMGECffr04YwzzuCMM85AVXn++ec5/fTT+eCDD2jevDnly5dn+vTpNGvWjPfff5+vv/6a+fPnU65cOcqVK8f69evp1KkT69evp2/fvixatIh169axadMmTj/9dJYsWUK1atUoV64cxxxzDJMnT+aUU07h+OOPZ+3atTRo0IAff/yRhg0bUr9+fapXr86SJUuYNm0azz//PBUrVmT79u2sWbOGtm3bcuuttxZ8drm5uYwaNYpevXpRsWJFALZs2UKXLl2488476dWrF3l5ebRu3ZoNGzZQv359evfuzWuvvcbpp5/Ohg0bWLRoEZmZmbzzzjuceOKJ7Nu3j8zMTNq1a8ett97K4sWLmTBhAi1btqRGjRqcdNJJXH311TzxxBPk5uZy2223MWrUKLKyspg0aRJVqlThiSeeYNWqVezdu5fjjz+eTz75hIoVK9K+fXtuuOEGZs+ezffff8/ChQt57LHH+OCDD/jLX/7CcccdR79+/Vi0aBF///vfycjIYPTo0QwZMoS2bdsWrN/q1atp164dy5cvp1mzZkyYMIEGDRpw8803s2DBAmrVqsU333xD+/btmTp1Ko8++iiZmZnJ3/mpqmd/BO7dvjrGuHlAt5D384GsGNPeDCwDljVt2lS9QuApUIX+QscVNZ3bv9zc3LD3jz/+eLHzjBkzJmZso0aNKnFM6fRXvnx5V9N98803BZ/dZ599Vmh8x44dFdBu3bpFnX/YsGEK6MSJE+OK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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(batch_accuracy, 'k-', label='Accuracy')\n",
    "plt.title('Batch Accuracy')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend(loc='lower right')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Loss')"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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9OnTh+OOO65Nx1y7di1Dhw7lM5/5TH75vPPOyx+rHFauXMnll1/OihUrNrrt1r5/VW1tbdHRYFOnTuXDH/4w8+fP3yrnkYSkjW+4mcfeElOmTMncpmXBggVlv3XL6tWrGT9+fLOym2++maFDh/L+++9n1m2q9evX09jYuEXHKOZHP/oRzz333BYfp6mpicsuu4y33nprK0S1ZVasWMHJJ5/MjBkz2v/kuTfPtjwdeeSR2toGDx4skvs55acf/OAH+fnf/va3+flCtbW1qqur01lnnaVx48apoaFBjz32mObPn5/f/rrrrlP//v0F6NRTT9XSpUvV1NSk5cuXa+zYsc2Ot3btWtXU1GTiW7RokW677TYtWbJEK1as0Lp163TQQQfp97//fdHHM2/ePM2aNUuSNH36dB1++OG67LLLBGjQoEGSpKamJv3pT3/SokWL8vutWrVKN954owA99NBDqqury6+bNWuWfv3rX6upqWmTntvGxkYB+spXvpIvmz9/vubOnasvfOELAnT77berqalJt912Wz7u1jz//POaOXOm6urq9MQTT2TO893vfrfZ9n/4wx80YsQITZkyRXvvvbdmzJghSbr++uv1m9/8JnP8pqYmTZo0SQ8++GC+7IUXXhCge++9t02PedmyZVqzZo3uvfdeHXnkkaqtrRWgL37xi5l4TzrppMz5r732Wj377LNFY1u+fLleeeUVvfTSSxuNY9q0aVq7dq3WrVsnKXkNZ8yYoYaGBl166aUaPXq0BgwYIEB1dXWaNWuW1qxZk3kvDB8+PP+6z549W8OHD5ckzZkzp9n/SDEtH+PSpUs1ffr0fEz33XefpkyZ0ux5qa+v14IFCzLHeumll/SPf/xDEydOzMfW0NCg+vp6TZ48WTfffLOk5H/klFNO0ZtvvqmZM2fm9//Sl76kM844I7+8bNmy/LF69erV7FxTp07Vueeem49TSv5ncteACRMmaM2aNZKkuXPn6r333mu2//jx4/WJT3xC48ePzzyO9evX64477tBNN92UP4YkjRw5UoC+9rWv6V//9V/1sY99LL/uySefzD/vmwuoUSvX1bJf2LfGVIrksHDhwswbYscdd8yU5aaf/exnampqalZ2/PHH5+evvvrqovt94hOfyJStWrVKL774ovbff/982UUXXSRJGjt2rL7+9a+3mrg6dOigoUOH5t9c06dPbzXm3HT55ZdLkp566qlm5ZJ07rnnZrZfsWKFOnfunF8eN26cVq9enb9YzJgxQ0uXLtXs2bP197//XStXrlRTU5MWLlyoPn36aNCgQfl9586dK0lF48olJUBnn322JOm5557LPy+PP/64RowYIUDdunXTZz/7WQGaNGmSGhoa9Pjjj+f379q1q9auXdvsXKeeeqoAHX744aqvr8+Xf/7zn9ecOXM0bNgw3XPPPfre976XX/fUU0/pyiuvzF9Ac9MXv/hF3XPPPRo+fLguvPBCAZo9e7bmzJmjmTNnCtCRRx5Z9HHmnrOWZZL0wAMPaPTo0fnyxsbGZv+nJ598crP9XnnlFf39738v+j/9f//3f/nt9ttvv/yFp7Up9//+mc98ZqP/Q4CWLVsmQJ06dZIkXXzxxTr77LM1e/ZszZ49Ox9Hy8eYew+ccsopeuihhwRo33331cqVKzVr1ixddNFF+X2WLl0qKbnYX3PNNUXjOPHEEwVor732EqDzzz+/6Ha33nprs+Xvfve7zZYPPfRQSdKKFSu000475cv//Oc/5z+w5cpy77MePXo0+/+++OKLNXfuXM2ZM0df+9rXBOiyyy5TTU2NGhsbNW3aNI0bN07Dhw9vdu6nnnpKw4cP1y9+8QsBzd6HrT2PmwMnh80zYcKENr0pctPbb7/dbPnDH/7wJu3f8p+75bTffvtt0nFeeumlNm33sY99rNmFNDf99Kc/bdP+H/rQh/LzEVF0m8MPP1zf//73N+v5aG3q1avXVj3e1p6KJfFi09y5c9t8zE996lP5/8+WH0ZaTiNHjtTtt9+uQYMGaeDAgerQoUNJH+/999+fny/8JF845ZJ5W6Zc7bqc06BBg1p93x1zzDH5+W9/+9tbdJ6hQ4e2edvPf/7zzZYfeOCBzb7G4eSw+cr9z+lp+5+OOuqoTdr+zjvv1Ec/+tGyx+2pcqYtuL61mhzcIb0RixcvZvny5Zu9f+E3rrdHP/7xj8sdwkbts88+5Q5hg8aMGbNJ21900UVMnTq1RNFYqey99968/PLLW/24v/jFL7b6MQHK/ql/a0ylrDnkvPbaa82ydLdu3Taazc8///x8O/ff/vY3/eQnP2l12912263VZqiWzTvHHXechg0bpt69e2v33Xdv0yeLe+65Rz179swvH3300bryyisF6Iorrmi27Te+8Y3M/jvssIMOPfTQZmUPP/zwRps22jq19nzee++9OvbYYze476c//Wl9/OMfb3X9D3/4Qy1YsCC/3L17d33yk58UoDFjxqhLly4bja9v375tfizPPvus+vTp0+r61ppcCqeWfRrQvNmm2HPQsmzPPfcsuu28efPafM7CqXPnzvrqV7+aX25qatLYsWObbZPrx9nY9L3vfU91dXX55Zqamvz8eeedt9H9C9v1IWkave666/Tss89u0f8hkOnHKTa1bNrJTS+++KIWLlyoO++8U1/+8pd18skn69Zbb9VTTz3VrKP+iSeeKLr/5z73Ob3//vv63e9+t8Hz/+hHPxKgvffee5MHhBTCzUpbxyOPPJIf2TNt2jRdfPHF+o//+I9mL9qoUaNUX1/f6gu26667Fn2x33jjDdXX1ze7UO+zzz469thj1dDQoCFDhgiSdtichoYGNTQ06OWXX9Zdd92V3+8b3/hG/uJ05pln6sorr5SUtFEPGzZMkCSYxsZGLV++XNIHzWf9+vXT+vXrNWLECE2dOlXz589XbW1t/py5UVotR0kUPhZJuvPOOzVu3Dg9+uijzTqvAT333HO65JJLBEnnce65mjx5sn71q1/ltysceTVr1ixBMsKppqZGv/zlL3XJJZc066AdP358s/Pk2orHjRundevW5cvvuOOOZrHX1dXpV7/6lcaOHasnnnhCN954o+rq6jRq1Kh8/88jjzyS33/hwoVasmSJli9frnvvvVeQdMLeeOONuv/++yVJK1euzG8/ceJEjRkzJn9RkaQRI0Zo3rx5zQYq3H777c2ew+7duwuSjuwJEyZIUrMRc4VTU1OT1q1bp/feey9ftmjRIi1durTZMXMKBx8MHDhQgGbMmFH0onXVVVfptddey+87c+bMZq/N3Xffne//WbJkSbN9n3nmGU2cOFHf/OY3tWjRonx5fX19/nnKvf65/9kbbrhBgE444QRdeOGF+cR/8803C9ARRxwhKemsnz17tpqampq935qamvT666/n/5/POecc9ejRQw8//LBWrFihefPm5d+3HTt2FNDs9Vq/fn0mye25556aNGmS+vTpo0ceeaTZ9pD070ydOlVtlUvQt9xyiz772c+qtWvYz3/+c40ZM0bjx49v1ik+bNgwnXPOOUVHMm4KJ4cSu+mmm7Tffvtp1apVG912zpw5evnll7Vq1Sqt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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(loss_vec, 'k-')\n",
    "plt.title('Loss per Generation')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Loss')"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "35d45d1db16ebad0710ab1697cb66eb90000ecea9566af6cb4ee4c767f56eaed"
  },
  "kernelspec": {
   "display_name": "Python 3.7.13 ('tf1')",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.13"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
